package com.goodlearning.gloriamobile.net;

import java.util.HashMap;
import java.util.Map;

import com.goodlearning.gloriamobile.R;
import com.goodlearning.gloriamobile.net.JsonRequestThread.INetFailCallback;
import com.goodlearning.gloriamobile.net.JsonRequestThread.INetSuccessCallback;

import org.apache.commons.codec.binary.Base64;

import android.app.ProgressDialog;
import android.content.Context;
/**
 * Service 분류  
 * (WebView 호출은 Service 요청이 없기 때문에 Constants 에 선언된 풀 URL 사용)
 * WebView 는 별개의 서비스로 취급   
 * 
 * @author rapty54
 *
 */
public class JsonServiceRequester {
	/**
	 * 새로 수정하여 추가된 URL
	 */
	private static final String SERVICE_LOGIN = "appservice/GetAuth.asp?";
	private static final String SERVICE_GET_TIME_LIST="appservice/GettimeList.asp?";
	private static final String SERVICE_GET_NOTICE_LIST="appservice/GetNoticeList.asp?";
	private static final String SERVICE_GET_Schedule_LIST = "appservice/GetScheduleList.asp?";
	private static final String SERVICE_GET_ATTTEND_LIST="appservice/getattendlist.asp?";
	private static final String SERVICE_GET_ATTTEND_VIEW_LIST="appservice/GetAttendView.asp?";
	private static final String SERVICE_GET_ATTTEND_VIEW_DETAIL_LIST="appservice/GetAttendViewInfo.asp?";
	private static final String SERVICE_GET_ATTEND_TOTAL="appservice/GetAttendTotal.asp?";
	private static final String SERVICE_GET_PAYMENT_LIST="appservice/GetPaymentList.asp?";
	private static final String SERVICE_GET_PAYMENT_BANK_VIEW="appservice/GetPaymentBankView.asp?";
	private static final String SERVICE_GET_ORG_LIST="appservice/GetOrgList.asp";
	
	/**글로리아 모바일
	 * 학생 학번/조회일 기준으로 요청한다.그러나 결국엔 동등한 Id 와 PW 로 처리한다. 
	 * 로그인
	 */
	public static void requestLogin(Context context, String userid, String password, INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", new String( Base64.encodeBase64(userid.getBytes())));
		paramMap.put("m_pw", new String( Base64.encodeBase64(password.getBytes())));
		requestService(context, SERVICE_LOGIN, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일
	 * 학생학번/조회일 기준으로 시간표 리스트를 가져온다. 결과는 아래와 같이 나온다 한다.
	 * 성공 : 교시(gyosi), 강좌/강사명(LecInfo), 강의실(LrNm)
	 */
	public static void requestGetTimeList(Context context,String m_id,String searchDate, INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		paramMap.put("searchDate", searchDate);
		requestService(context, SERVICE_GET_TIME_LIST, paramMap, callback, null, true);
	}
	
	/**글로리아 모바일 
	 *공지 페이지
	 *
	 * 리스트조회
	 */
	public static void requestGetNoticeList(Context context, String noticetype,int noticePage, INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("noticetype", noticetype);
		paramMap.put("page", String.valueOf(noticePage));
		requestService(context, SERVICE_GET_NOTICE_LIST, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일 
	 * 학사행정 >> 진행중  강의 출결확인
	 * 
	 * 
	 */
	public static void requestGetInProgressScheduleList(Context context, String searchYear, INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("searchYear", searchYear);
		requestService(context, SERVICE_GET_Schedule_LIST, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일
	 * 학생학번/searchType 0 기준으로 시간표 리스트를 가져온다. 결과는 아래와 같이 나온다 한다.
	 * 성공 : 강좌기준키(LIdx), 강좌반기준키(LbIdx), 강좌명(lecNm), 학년학기명(hakgiNm), 교수명(nm)
	 */
	public static void requestGetAttendList(Context context,String m_id,String searchType, INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		paramMap.put("searchtype", searchType);
		requestService(context, SERVICE_GET_ATTTEND_LIST, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일 
	 * 성공 : 주차(Lweek), 년월일(tDate), 교시(gyosi), 출석상태(attendStatus)
	 * @param context
	 * @param m_id
	 * @param LbIdx
	 * @param callback
	 */
	
	public static void requestGetAttendView(Context context,String m_id,String LbIdx,INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		paramMap.put("LbIdx", LbIdx);
		requestService(context, SERVICE_GET_ATTTEND_VIEW_LIST, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일
	 * 출석 상세 일반 정보
	 * 성공 : 년도(hYear), 학년(hnNm), 학기명(tNm), 강좌명(lecNm), 교육기간시작일(gaeGangDay), 교육기간종료일(jongGangDay), 강사명(nm), 학점(hakJeom)
	 * @param context
	 * @param m_id
	 * @param LbIdx
	 * @param LIdx
	 * @param callback
	 */
	public static void requestGetAttendViewInfo(Context context,String m_id,String LbIdx,String LIdx,INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		paramMap.put("LbIdx", LbIdx);
		paramMap.put("LIdx", LIdx);
		requestService(context, SERVICE_GET_ATTTEND_VIEW_DETAIL_LIST, paramMap, callback, null, true);
	}
	
	/**
	 * 글로리아 모바일
	 * 출석 상세 전체 수업일수
	 * 성공 : 전체수업일(totAttend)
	 * @param context
	 * @param LbIdx
	 * @param callback
	 */
	public static void requestGetAttendTotal(Context context,String LbIdx,INetSuccessCallback callback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("lbidx", LbIdx);
		requestService(context, SERVICE_GET_ATTEND_TOTAL, paramMap, callback, null, true);
	}
	
	/**
	 * 등록금 납부 리스트
	 * @param context
	 * @param m_id
	 */
	public static void requestGetPayment(Context context,String m_id,INetSuccessCallback netSuccessCallback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		requestService(context, SERVICE_GET_PAYMENT_LIST, paramMap, netSuccessCallback, null, true);
	}
	
	/**
	 * 등록금 계좌 정보
	 * @param context
	 * @param m_id
	 * @param rfid
	 * @param hYear
	 * @param hakgi
	 */
	public static void requestGetPaymentBankView(Context context,String m_id,String rfid,String hYear,String hakgi,INetSuccessCallback successCallback){
		Map<String,String> paramMap = new HashMap<String, String>();
		paramMap.put("m_id", m_id);
		paramMap.put("rfid", rfid);
		paramMap.put("hYear", hYear);
		paramMap.put("hakgi", hakgi);
		requestService(context, SERVICE_GET_PAYMENT_BANK_VIEW, paramMap, successCallback, null, true);
	}
	
	/**
	 * 글로리아 모바일 관련된 시설학교 들에 대한 요청값
	 * @param context
	 * @param successCallback
	 */
	public static void requestGetOrgList(Context context,INetSuccessCallback successCallback){
		Map<String,String> paramMap = new HashMap<String, String>();
		requestService(context, SERVICE_GET_ORG_LIST, paramMap, successCallback, null, true);
	}
	
	/**
	 * ProgressDialog와 동기화되는 서비스요청스레드 수행
	 * @param context 
	 * @param serviceLogin
	 * @param paramMap
	 * @param callback 
	 * @param showProgressDialog 
	 */
	private static void requestService(Context context, String serviceName, Map<String, String> paramMap, INetSuccessCallback successCallback, INetFailCallback failCallback , boolean showProgressDialog) {
		//ProgressDialog prgDlg = ProgressDialog.show(context, "", "서비스를 요청중입니다.....",true,true);
		ProgressDialog prgDlg = null;
		if(showProgressDialog){
			prgDlg = ProgressDialog.show(context, "", "",true,true);
			prgDlg.getWindow().setContentView(R.layout.progressbar);
		}
		JsonRequestThread reqThread = new JsonRequestThread(context, serviceName, paramMap, successCallback, failCallback, prgDlg);
		reqThread.start();
	}
}




